BASELINE = {
    "config_name": "baseline",
    "stem": [
        {
            "block_name": "GroupConvBN",
            "num_blocks": 1,
            # inp, oup, ks=3, stride=1, dilation=1, groups=1, bn=True, act=None
            "block_specs": [[1, 32, 3, 1, 1, 1, True, 'gelu']]
        }
    ],
    "features": [
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[32, 64, 64, 3, 4, 1, 1, False, None, False, True, False, 'gelu']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 2, 1, 1, False, None, False, True, False, 'gelu']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 1, 1, 1, False, None, True, True, False, 'gelu']]
        }
    ],
    "classifier": [
        # {
        #     "block_name": "FC_classifier",
        #     # in_features, out_features, bias=False
        #     "block_specs": [64, 64, False]
        # },
        {
            "block_name": "SubCenterArcFace",
            # embedding_size, num_classes, k, margin, scale, easy_margin=
            "block_specs": [64, 18, 1, 0.1, 16, False]
        }
    ]
}

BASELINE_D = {
    "config_name": "baseline_d",
    "stem": [
        {
            "block_name": "GroupConvBN",
            "num_blocks": 1,
            # inp, oup, ks=3, stride=1, dilation=1, groups=1, bn=True, act=None
            "block_specs": [[1, 32, 3, 1, 1, 1, True, 'gelu']]
        }
    ],
    "features": [
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[32, 64, 64, 3, 1, 1, 1, False, None, False, True, False, 'gelu']]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 3,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 1, 1, 1, False, None, False, True, False, 'gelu'],
                            [64, 64, 64, 3, 1, 1, 1, False, None, False, True, False, 'gelu'],
                            [64, 64, 64, 3, 1, 1, 1, False, None, False, True, False, 'gelu'],]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 2,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 1, 1, 1, False, None, False, True, False, 'gelu'],
                            [64, 64, 64, 3, 1, 1, 1, False, None, False, True, False, 'gelu'],]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 1, 1, 1, False, None, True, True, False, 'gelu']]
        }
    ],
    "classifier": [
        {
            "block_name": "SubCenterArcFace",
            # embedding_size, num_classes, k, margin, scale, easy_margin=
            "block_specs": [64, 18, 1, 0.1, 16, False]
        }
    ]
}

BASELINE_D_RES = {
    "config_name": "baseline_d_res",
    "stem": [
        {
            "block_name": "GroupConvBN",
            "num_blocks": 1,
            # inp, oup, ks=3, stride=1, dilation=1, groups=1, bn=True, act=None
            "block_specs": [[1, 32, 3, 1, 1, 1, True, 'gelu']]
        }
    ],
    "features": [
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[32, 64, 64, 3, 1, 1, 1, False, None, False, True, False, 'gelu']]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 3,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 1, 1, 1, False, None, False, True, True, 'gelu'],
                            [64, 64, 64, 3, 1, 1, 1, False, None, False, True, True, 'gelu'],
                            [64, 64, 64, 3, 1, 1, 1, False, None, False, True, True, 'gelu'],]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 2,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 1, 1, 1, False, None, False, True, True, 'gelu'],
                            [64, 64, 64, 3, 1, 1, 1, False, None, False, True, True, 'gelu'],]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 1, 1, 1, False, None, True, True, False, 'gelu']]
        }
    ],
    "classifier": [
        {
            "block_name": "SubCenterArcFace",
            # embedding_size, num_classes, k, margin, scale, easy_margin=
            "block_specs": [64, 18, 1, 0.1, 16, False]
        }
    ]
}

BASELINE_XIKE = {
    "config_name": "baseline_XIKE",
    "stem": [
        {
            "block_name": "GroupConvBN",
            "num_blocks": 1,
            # inp, oup, ks=3, stride=1, dilation=1, groups=1, bn=True, act=None
            "block_specs": [[1, 32, 3, 1, 1, 1, True, 'gelu']]
        }
    ],
    "features": [
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[32, 64, 64, 3, 4, 1, 1, False, None, False, True, False, 'gelu']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 2, 1, 1, False, None, False, True, False, 'gelu']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 1, 1, 1, False, None, False, True, False, 'gelu']]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 1, 1, 1, False, None, True, True, False, 'gelu']]
        }
    ],
    "classifier": [
        # {
        #     "block_name": "FC_classifier",
        #     # in_features, out_features, bias=False
        #     "block_specs": [64, 64, False]
        # },
        {
            "block_name": "SubCenterArcFace",
            # embedding_size, num_classes, k, margin, scale, easy_margin=
            "block_specs": [64, 18, 1, 0.1, 16, False]
        }
    ]
}

BASE_EBN = {
    "config_name": "base_ebn",
    "stem": [
        {
            "block_name": "GroupConvBN",
            "num_blocks": 1,
            # inp, oup, ks=3, stride=1, dilation=1, groups=1, bn=True, act=None
            "block_specs": [[1, 32, 3, 1, 1, 1, True, 'gelu']]
        }
    ],
    "features": [
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[32, 64, 64, 3, 4, 1, 1, True, None, False, True, False, 'gelu']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 2, 1, 1, True, None, False, True, False, 'gelu']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 1, 1, 1, True, None, True, True, False, 'gelu']]
        }
    ],
    "classifier": [
        {
            "block_name": "SubCenterArcFace",
            # embedding_size, num_classes, k, margin, scale, easy_margin=
            "block_specs": [64, 18, 1, 0.1, 16, False]
        }
    ]
}

FOURBLOCK = {
    "config_name": "baseline",
    "stem": [
        {
            "block_name": "GroupConvBN",
            "num_blocks": 1,
            # inp, oup, ks=3, stride=1, dilation=1, groups=1, bn=True, act=None
            "block_specs": [[1, 32, 3, 1, 1, 1, True, 'gelu']]
        }
    ],
    "features": [
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[32, 64, 64, 3, 4, 1, 1, False, None, False, True, False, 'gelu']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 2, 1, 1, False, None, False, True, False, 'gelu']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 1, 1, 1, False, None, False, True, False, 'gelu']]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 1, 1, 1, False, None, True, True, False, 'gelu']]
        }
    ],
    "classifier": [
        {
            "block_name": "SubCenterArcFace",
            # embedding_size, num_classes, k, margin, scale, easy_margin=
            "block_specs": [64, 18, 1, 0.1, 16, False]
        }
    ]
}
LASTPROJ_SOFTMAX = {
    "config_name": "lastproj_softmax",
    "stem": [
        {
            "block_name": "GroupConvBN",
            "num_blocks": 1,
            # inp, oup, ks=3, stride=1, dilation=1, groups=1, bn=True, act=None
            "block_specs": [[1, 32, 3, 1, 1, 1, True, 'gelu']]
        }
    ],
    "features": [
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[32, 64, 64, 3, 4, 1, 1, False, None, False, True, False, 'gelu']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 2, 1, 1, False, None, False, True, False, 'gelu']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 1, 1, 1, False, None, True, True, False, 'gelu']]
        }
    ],
    "classifier": [
        {
            "block_name": "FC_classifier",
            # in_features, out_features, bias=False
            "block_specs": [64, 64, False]
        },
    ]
}

FC_ARCFACE = {
    "config_name": "fc_arcface",
    "stem": [
        {
            "block_name": "GroupConvBN",
            "num_blocks": 1,
            # inp, oup, ks=3, stride=1, dilation=1, groups=1, bn=True, act=None
            "block_specs": [[1, 32, 3, 1, 1, 1, True, 'gelu']]
        }
    ],
    "features": [
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[32, 64, 64, 3, 4, 1, 1, False, None, False, True, False, 'gelu']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 2, 1, 1, False, None, False, True, False, 'gelu']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 1, 1, 1, False, None, False, False, False, 'gelu']]
        }
    ],
    "fc": [
        {
            "block_name": "FC",
            # in_features, out_features, bias=False
            "block_specs": [64, 64, False]
        }
    ],
    "classifier": [
        {
            "block_name": "SubCenterArcFace",
            # embedding_size, num_classes, k, margin, scale, easy_margin=
            "block_specs": [64, 18, 1, 0.1, 16, False]
        }
    ]
}

FC_SOFTMAX = {
    "config_name": "fc_softmax",
    "stem": [
        {
            "block_name": "GroupConvBN",
            "num_blocks": 1,
            # inp, oup, ks=3, stride=1, dilation=1, groups=1, bn=True, act=None
            "block_specs": [[1, 32, 3, 1, 1, 1, True, 'gelu']]
        }
    ],
    "features": [
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[32, 64, 64, 3, 4, 1, 1, False, None, False, True, False, 'gelu']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 2, 1, 1, False, None, False, True, False, 'gelu']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 1, 1, 1, False, None, False, False, False, 'gelu']]
        }
    ],
    "fc": [
        {
            "block_name": "FC",
            # in_features, out_features, bias=False
            "block_specs": [64, 64, False]
        }
    ],
    "classifier": [
        {
            "block_name": "FC_classifier",
            # in_features, out_features, bias=False
            "block_specs": [64, 64, False]
        }
    ]
}

NOTRANS_ARCFACE = {
    "config_name": "notrans_arcface",
    "stem": [
        {
            "block_name": "GroupConvBN",
            "num_blocks": 1,
            # inp, oup, ks=3, stride=1, dilation=1, groups=1, bn=True, act=None
            "block_specs": [[1, 32, 3, 1, 1, 1, True, 'gelu']]
        }
    ],
    "features": [
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[32, 64, 64, 3, 4, 1, 1, False, None, False, True, False, 'gelu']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 2, 1, 1, False, None, False, True, False, 'gelu']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 1, 1, 1, False, None, False, False, False, 'gelu']]
        }
    ],
    "classifier": [
        {
            "block_name": "SubCenterArcFace",
            # embedding_size, num_classes, k, margin, scale, easy_margin=
            "block_specs": [64, 18, 1, 0.1, 16, False]
        }
    ]
}

NOTRANS_SOFTMAX = {
    "config_name": "notrans_softmax",
    "stem": [
        {
            "block_name": "GroupConvBN",
            "num_blocks": 1,
            # inp, oup, ks=3, stride=1, dilation=1, groups=1, bn=True, act=None
            "block_specs": [[1, 32, 3, 1, 1, 1, True, 'gelu']]
        }
    ],
    "features": [
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[32, 64, 64, 3, 4, 1, 1, False, None, False, True, False, 'gelu']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 2, 1, 1, False, None, False, True, False, 'gelu']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 1, 1, 1, False, None, False, False, False, 'gelu']]
        }
    ],
    "classifier": [
        {
            "block_name": "FC_classifier",
            # in_features, out_features, bias=False
            "block_specs": [64, 64, False]
        }
    ]
}

ALL_PROJECTION = {
    "config_name": "all_projection",
    "stem": [
        {
            "block_name": "GroupConvBN",
            "num_blocks": 1,
            # inp, oup, ks=3, stride=1, dilation=1, groups=1, bn=True, act=None
            "block_specs": [[1, 32, 3, 1, 1, 1, True, 'gelu']]
        }
    ],
    "features": [
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[32, 64, 64, 3, 4, 1, 1, False, None, True, True, False, 'gelu']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 2, 1, 1, False, None, True, True, False, 'gelu']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 1, 1, 1, False, None, True, True, False, 'gelu']]
        }
    ],
    "classifier": [
        {
            "block_name": "SubCenterArcFace",
            # embedding_size, num_classes, k, margin, scale, easy_margin=
            "block_specs": [64, 18, 1, 0.1, 16, False]
        }
    ]
}

ALL_PROJECTION_NOBN = {
    "config_name": "all_projection_noBn",
    "stem": [
        {
            "block_name": "GroupConvBN",
            "num_blocks": 1,
            # inp, oup, ks=3, stride=1, dilation=1, groups=1, bn=True, act=None
            "block_specs": [[1, 32, 3, 1, 1, 1, True, 'gelu']]
        }
    ],
    "features": [
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[32, 64, 64, 3, 4, 1, 1, False, None, True, False, False, 'gelu']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 2, 1, 1, False, None, True, False, False, 'gelu']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 1, 1, 1, False, None, True, False, False, 'gelu']]
        }
    ],
    "classifier": [
        {
            "block_name": "SubCenterArcFace",
            # embedding_size, num_classes, k, margin, scale, easy_margin=
            "block_specs": [64, 18, 1, 0.1, 16, False]
        }
    ]
}

WITH_RES = {
    "config_name": "with_res",
    "stem": [
        {
            "block_name": "GroupConvBN",
            "num_blocks": 1,
            # inp, oup, ks=3, stride=1, dilation=1, groups=1, bn=True, act=None
            "block_specs": [[1, 32, 3, 1, 1, 1, True, 'gelu']]
        }
    ],
    "features": [
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[32, 64, 64, 3, 4, 1, 1, False, None, False, True, True, 'gelu']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 2, 1, 1, False, None, False, True, True, 'gelu']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 1, 1, 1, False, None, True, True, True, 'gelu']]
        }
    ],
    "classifier": [
        {
            "block_name": "SubCenterArcFace",
            # embedding_size, num_classes, k, margin, scale, easy_margin=
            "block_specs": [64, 18, 1, 0.1, 16, False]
        }
    ],
}

SUBCENTER_2 = {
    "config_name": "baseline",
    "stem": [
        {
            "block_name": "GroupConvBN",
            "num_blocks": 1,
            # inp, oup, ks=3, stride=1, dilation=1, groups=1, bn=True, act=None
            "block_specs": [[1, 32, 3, 1, 1, 1, True, 'gelu']]
        }
    ],
    "features": [
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[32, 64, 64, 3, 4, 1, 1, False, None, False, True, False, 'gelu']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 2, 1, 1, False, None, False, True, False, 'gelu']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 1, 1, 1, False, None, True, True, False, 'gelu']]
        }
    ],
    "classifier": [
        {
            "block_name": "SubCenterArcFace",
            # embedding_size, num_classes, k, margin, scale, easy_margin=
            "block_specs": [64, 18, 2, 0.1, 16, False]
        }
    ],
}

SUBCENTER_4 = {
    "config_name": "baseline",
    "stem": [
        {
            "block_name": "GroupConvBN",
            "num_blocks": 1,
            # inp, oup, ks=3, stride=1, dilation=1, groups=1, bn=True, act=None
            "block_specs": [[1, 32, 3, 1, 1, 1, True, 'gelu']]
        }
    ],
    "features": [
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[32, 64, 64, 3, 4, 1, 1, False, None, False, True, False, 'gelu']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 2, 1, 1, False, None, False, True, False, 'gelu']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 1, 1, 1, False, None, True, True, False, 'gelu']]
        }
    ],
    "classifier": [
        {
            "block_name": "SubCenterArcFace",
            # embedding_size, num_classes, k, margin, scale, easy_margin=
            "block_specs": [64, 18, 4, 0.1, 16, False]
        }
    ],
}

DW_ACT_RELU = {
    "config_name": "dw_act_relu",
    "stem": [
        {
            "block_name": "GroupConvBN",
            "num_blocks": 1,
            # inp, oup, ks=3, stride=1, dilation=1, groups=1, bn=True, act=None
            "block_specs": [[1, 32, 3, 1, 1, 1, True, 'relu']]
        }
    ],
    "features": [
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[32, 64, 64, 3, 4, 1, 1, False, None, False, True, False, 'relu']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 2, 1, 1, False, None, False, True, False, 'relu']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 1, 1, 1, False, None, True, True, False, 'relu']]
        }
    ],
    "classifier": [
        {
            "block_name": "SubCenterArcFace",
            # embedding_size, num_classes, k, margin, scale, easy_margin=
            "block_specs": [64, 18, 1, 0.1, 16, False]
        }
    ],
}

DW_ACT_RELU6 = {
    "config_name": "dw_act_relu6",
    "stem": [
        {
            "block_name": "GroupConvBN",
            "num_blocks": 1,
            # inp, oup, ks=3, stride=1, dilation=1, groups=1, bn=True, act=None
            "block_specs": [[1, 32, 3, 1, 1, 1, True, 'relu6']]
        }
    ],
    "features": [
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[32, 64, 64, 3, 4, 1, 1, False, None, False, True, False, 'relu6']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 2, 1, 1, False, None, False, True, False, 'relu6']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 1, 1, 1, False, None, True, True, False, 'relu6']]
        }
    ],
    "classifier": [
        {
            "block_name": "SubCenterArcFace",
            # embedding_size, num_classes, k, margin, scale, easy_margin=
            "block_specs": [64, 18, 1, 0.1, 16, False]
        }
    ],
}

DW_ACT_LEAKYRELU = {
    "config_name": "dw_act_leakyRelu",
    "stem": [
        {
            "block_name": "GroupConvBN",
            "num_blocks": 1,
            # inp, oup, ks=3, stride=1, dilation=1, groups=1, bn=True, act=None
            "block_specs": [[1, 32, 3, 1, 1, 1, True, 'leakyRelu']]
        }
    ],
    "features": [
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[32, 64, 64, 3, 4, 1, 1, False, None, False, True, False, 'leakyRelu']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 2, 1, 1, False, None, False, True, False, 'leakyRelu']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 1, 1, 1, False, None, True, True, False, 'leakyRelu']]
        }
    ],
    "classifier": [
        {
            "block_name": "SubCenterArcFace",
            # embedding_size, num_classes, k, margin, scale, easy_margin=
            "block_specs": [64, 18, 1, 0.1, 16, False]
        }
    ],
}

DW_ACT_ELU = {
    "config_name": "dw_act_elu",
    "stem": [
        {
            "block_name": "GroupConvBN",
            "num_blocks": 1,
            # inp, oup, ks=3, stride=1, dilation=1, groups=1, bn=True, act=None
            "block_specs": [[1, 32, 3, 1, 1, 1, True, 'elu']]
        }
    ],
    "features": [
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[32, 64, 64, 3, 4, 1, 1, False, None, False, True, False, 'elu']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 2, 1, 1, False, None, False, True, False, 'elu']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 1, 1, 1, False, None, True, True, False, 'elu']]
        }
    ],
    "classifier": [
        {
            "block_name": "SubCenterArcFace",
            # embedding_size, num_classes, k, margin, scale, easy_margin=
            "block_specs": [64, 18, 1, 0.1, 16, False]
        }
    ],
}

DW_ACT_MISH = {
    "config_name": "dw_act_mish",
    "stem": [
        {
            "block_name": "GroupConvBN",
            "num_blocks": 1,
            # inp, oup, ks=3, stride=1, dilation=1, groups=1, bn=True, act=None
            "block_specs": [[1, 32, 3, 1, 1, 1, True, 'mish']]
        }
    ],
    "features": [
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[32, 64, 64, 3, 4, 1, 1, False, None, False, True, False, 'mish']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 2, 1, 1, False, None, False, True, False, 'mish']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 1, 1, 1, False, None, True, True, False, 'mish']]
        }
    ],
    "classifier": [
        {
            "block_name": "SubCenterArcFace",
            # embedding_size, num_classes, k, margin, scale, easy_margin=
            "block_specs": [64, 18, 1, 0.1, 16, False]
        }
    ],
}

DW_ACT_SWISH = {
    "config_name": "dw_act_swish",
    "stem": [
        {
            "block_name": "GroupConvBN",
            "num_blocks": 1,
            # inp, oup, ks=3, stride=1, dilation=1, groups=1, bn=True, act=None
            "block_specs": [[1, 32, 3, 1, 1, 1, True, 'swish']]
        }
    ],
    "features": [
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[32, 64, 64, 3, 4, 1, 1, False, None, False, True, False, 'swish']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 2, 1, 1, False, None, False, True, False, 'swish']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 1, 1, 1, False, None, True, True, False, 'swish']]
        }
    ],
    "classifier": [
        {
            "block_name": "SubCenterArcFace",
            # embedding_size, num_classes, k, margin, scale, easy_margin=
            "block_specs": [64, 18, 1, 0.1, 16, False]
        }
    ],
}

DW_ACT_HSWISH = {
    "config_name": "dw_act_hswish",
    "stem": [
        {
            "block_name": "GroupConvBN",
            "num_blocks": 1,
            # inp, oup, ks=3, stride=1, dilation=1, groups=1, bn=True, act=None
            "block_specs": [[1, 32, 3, 1, 1, 1, True, 'hswish']]
        }
    ],
    "features": [
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[32, 64, 64, 3, 4, 1, 1, False, None, False, True, False, 'hswish']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 2, 1, 1, False, None, False, True, False, 'hswish']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 1, 1, 1, False, None, True, True, False, 'hswish']]
        }
    ],
    "classifier": [
        {
            "block_name": "SubCenterArcFace",
            # embedding_size, num_classes, k, margin, scale, easy_margin=
            "block_specs": [64, 18, 1, 0.1, 16, False]
        }
    ],
}

WITH_E_ACT_GELU = {
    "config_name": "withE_Act=gelu",
    "stem": [
        {
            "block_name": "GroupConvBN",
            "num_blocks": 1,
            # inp, oup, ks=3, stride=1, dilation=1, groups=1, bn=True, act=None
            "block_specs": [[1, 32, 3, 1, 1, 1, True, 'gelu']]
        }
    ],
    "features": [
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[32, 64, 64, 3, 4, 1, 1, True, 'gelu', False, True, False, 'gelu']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 2, 1, 1, True, 'gelu', False, True, False, 'gelu']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 1, 1, 1, True, 'gelu', True, True, False, 'gelu']]
        }
    ],
    "classifier": [
        {
            "block_name": "SubCenterArcFace",
            # embedding_size, num_classes, k, margin, scale, easy_margin=
            "block_specs": [64, 18, 1, 0.1, 16, False]
        }
    ],
}

WITH_E_ACT_RELU = {
    "config_name": "withE_Act=relu",
    "stem": [
        {
            "block_name": "GroupConvBN",
            "num_blocks": 1,
            # inp, oup, ks=3, stride=1, dilation=1, groups=1, bn=True, act=None
            "block_specs": [[1, 32, 3, 1, 1, 1, True, 'relu']]
        }
    ],
    "features": [
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[32, 64, 64, 3, 4, 1, 1, True, 'relu', False, True, False, 'relu']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 2, 1, 1, True, 'relu', False, True, False, 'relu']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 1, 1, 1, True, 'relu', True, True, False, 'relu']]
        }
    ],
    "classifier": [
        {
            "block_name": "SubCenterArcFace",
            # embedding_size, num_classes, k, margin, scale, easy_margin=
            "block_specs": [64, 18, 1, 0.1, 16, False]
        }
    ],
}

WITH_E_ACT_RELU6 = {
    "config_name": "withE_Act=relu6",
    "stem": [
        {
            "block_name": "GroupConvBN",
            "num_blocks": 1,
            # inp, oup, ks=3, stride=1, dilation=1, groups=1, bn=True, act=None
            "block_specs": [[1, 32, 3, 1, 1, 1, True, 'relu6']]
        }
    ],
    "features": [
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[32, 64, 64, 3, 4, 1, 1, True, 'relu6', False, True, False, 'relu6']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 2, 1, 1, True, 'relu6', False, True, False, 'relu6']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 1, 1, 1, True, 'relu6', True, True, False, 'relu6']]
        }
    ],
    "classifier": [
        {
            "block_name": "SubCenterArcFace",
            # embedding_size, num_classes, k, margin, scale, easy_margin=
            "block_specs": [64, 18, 1, 0.1, 16, False]
        }
    ],
}

WITH_E_ACT_ELU = {
    "config_name": "withE_Act=elu",
    "stem": [
        {
            "block_name": "GroupConvBN",
            "num_blocks": 1,
            # inp, oup, ks=3, stride=1, dilation=1, groups=1, bn=True, act=None
            "block_specs": [[1, 32, 3, 1, 1, 1, True, 'elu']]
        }
    ],
    "features": [
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[32, 64, 64, 3, 4, 1, 1, True, 'elu', False, True, False, 'elu']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 2, 1, 1, True, 'elu', False, True, False, 'elu']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 1, 1, 1, True, 'elu', True, True, False, 'elu']]
        }
    ],
    "classifier": [
        {
            "block_name": "SubCenterArcFace",
            # embedding_size, num_classes, k, margin, scale, easy_margin=
            "block_specs": [64, 18, 1, 0.1, 16, False]
        }
    ],
}

WITH_E_ACT_MISH = {
    "config_name": "withE_Act=mish",
    "stem": [
        {
            "block_name": "GroupConvBN",
            "num_blocks": 1,
            # inp, oup, ks=3, stride=1, dilation=1, groups=1, bn=True, act=None
            "block_specs": [[1, 32, 3, 1, 1, 1, True, 'mish']]
        }
    ],
    "features": [
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[32, 64, 64, 3, 4, 1, 1, True, 'mish', False, True, False, 'mish']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 2, 1, 1, True, 'mish', False, True, False, 'mish']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 1, 1, 1, True, 'mish', True, True, False, 'mish']]
        }
    ],
    "classifier": [
        {
            "block_name": "SubCenterArcFace",
            # embedding_size, num_classes, k, margin, scale, easy_margin=
            "block_specs": [64, 18, 1, 0.1, 16, False]
        }
    ],
}

WITH_E_ACT_SWISH = {
    "config_name": "withE_Act=swish",
    "stem": [
        {
            "block_name": "GroupConvBN",
            "num_blocks": 1,
            # inp, oup, ks=3, stride=1, dilation=1, groups=1, bn=True, act=None
            "block_specs": [[1, 32, 3, 1, 1, 1, True, 'swish']]
        }
    ],
    "features": [
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[32, 64, 64, 3, 4, 1, 1, True, 'swish', False, True, False, 'swish']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 2, 1, 1, True, 'swish', False, True, False, 'swish']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 1, 1, 1, True, 'swish', True, True, False, 'swish']]
        }
    ],
    "classifier": [
        {
            "block_name": "SubCenterArcFace",
            # embedding_size, num_classes, k, margin, scale, easy_margin=
            "block_specs": [64, 18, 1, 0.1, 16, False]
        }
    ],
}

WITH_E_ACT_LEAKYRELU = {
    "config_name": "withE_Act=leakyRelu",
    "stem": [
        {
            "block_name": "GroupConvBN",
            "num_blocks": 1,
            # inp, oup, ks=3, stride=1, dilation=1, groups=1, bn=True, act=None
            "block_specs": [[1, 32, 3, 1, 1, 1, True, 'leakyRelu']]
        }
    ],
    "features": [
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[32, 64, 64, 3, 4, 1, 1, True, 'leakyRelu', False, True, False, 'leakyRelu']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 2, 1, 1, True, 'leakyRelu', False, True, False, 'leakyRelu']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 1, 1, 1, True, 'leakyRelu', True, True, False, 'leakyRelu']]
        }
    ],
    "classifier": [
        {
            "block_name": "SubCenterArcFace",
            # embedding_size, num_classes, k, margin, scale, easy_margin=
            "block_specs": [64, 18, 1, 0.1, 16, False]
        }
    ],
}

WITH_E_ACT_HSWISH = {
    "config_name": "withE_Act=hswish",
    "stem": [
        {
            "block_name": "GroupConvBN",
            "num_blocks": 1,
            # inp, oup, ks=3, stride=1, dilation=1, groups=1, bn=True, act=None
            "block_specs": [[1, 32, 3, 1, 1, 1, True, 'hswish']]
        }
    ],
    "features": [
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[32, 64, 64, 3, 4, 1, 1, True, 'hswish', False, True, False, 'hswish']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 2, 1, 1, True, 'hswish', False, True, False, 'hswish']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 1, 1, 1, True, 'hswish', True, True, False, 'hswish']]
        }
    ],
    "classifier": [
        {
            "block_name": "SubCenterArcFace",
            # embedding_size, num_classes, k, margin, scale, easy_margin=
            "block_specs": [64, 18, 1, 0.1, 16, False]
        }
    ],
}

MDW_DOWNSAMPLE2 = {
    "config_name": "mdw_downsample2",
    "stem": [
        {
            "block_name": "GroupConvBN",
            "num_blocks": 1,
            # inp, oup, ks=3, stride=1, dilation=1, groups=1, bn=True, act=None
            "block_specs": [[1, 32, 3, 2, 1, 1, True, 'gelu']]
        }
    ],
    "features": [
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[32, 64, 64, 3, 4, 1, 1, False, None, False, True, False, 'gelu']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 2, 1, 1, False, None, False, True, False, 'gelu']]
        },
        {
            "block_name": "AvgPool2d",
            "num_blocks": 1,
            # kernel_size, stride
            "block_specs": [[2, 2]]
        },
        {
            "block_name": "MDW_Block",
            "num_blocks": 1,
            # inp, hidden_sz, oup, ks=3, dw_num=4, stride=1, dilation=1, e_bn=False, e_act=None, proj=False, proj_bn=True, res=False, dw_act='gelu'
            "block_specs": [[64, 64, 64, 3, 1, 1, 1, False, None, True, True, False, 'gelu']]
        }
    ],
    "classifier": [
        # {
        #     "block_name": "FC_classifier",
        #     # in_features, out_features, bias=False
        #     "block_specs": [64, 64, False]
        # },
        {
            "block_name": "SubCenterArcFace",
            # embedding_size, num_classes, k, margin, scale, easy_margin=
            "block_specs": [64, 18, 1, 0.1, 16, False]
        }
    ]
}
MNV4_FONT_WIDTH = {
    "config_name": "mnv4_font_width",
    "stem": [
        {
            "block_name": "convbn",
            "num_blocks": 1,
            "block_specs": [[1, 32, 3, 1]]
        }
    ],
    "features": [
        {
            "block_name": "uib",
            "num_blocks": 3,
            "block_specs": [[32, 64, 0, 3, True, 2, 8],
                            [64, 64, 0, 3, True, 2, 2],
                            [64, 64, 0, 3, True, 1, 1]]
        }
    ],
    "classifier": [
        {
            "block_name": "SubCenterArcFace",
            # embedding_size, num_classes, k, margin, scale, easy_margin=
            "block_specs": [64, 18, 1, 0.1, 16, False]
        }
    ],
}

MNV4_FONT_WIDTH_FC = {
    "config_name": "mnv4_font_width_fc",
    "stem": [
        {
            "block_name": "convbn",
            "num_blocks": 1,
            "block_specs": [[1, 32, 3, 1]]
        }
    ],
    "features": [
        {
            "block_name": "uib",
            "num_blocks": 3,
            "block_specs": [[32, 64, 0, 3, True, 2, 8],
                            [64, 64, 0, 3, True, 2, 2],
                            [64, 64, 0, 3, True, 1, 1]]
        }
    ],
    "classifier": [
        {
            "block_name": "FC_classifier",
            # in_features, out_features, bias=False
            "block_specs": [64, 64, False]
        }
    ]
}

MNV4_FONT_WIDTH_FC_DOWNSAMPLE2 = {
    "config_name": "mnv4_font_width_fc_downsample2",
    "stem": [
        {
            "block_name": "convbn",
            "num_blocks": 1,
            "block_specs": [[1, 32, 3, 2]]
        }
    ],
    "features": [
        {
            "block_name": "uib",
            "num_blocks": 3,
            "block_specs": [[32, 64, 0, 3, True, 2, 8],
                            [64, 64, 0, 3, True, 2, 2],
                            [64, 64, 0, 3, True, 1, 1]]
        }
    ],
    "classifier": [
        {
            "block_name": "FC_classifier",
            # in_features, out_features, bias=False
            "block_specs": [64, 64, False]
        }
    ]
}

MNV4_FONT_DEPTH = {
    "config_name": "mnv4_font_depth",
    "stem": [
        {
            "block_name": "convbn",
            "num_blocks": 1,
            "block_specs": [[1, 32, 3, 1]]
        }
    ],
    "features": [
        {
            "block_name": "uib",
            "num_blocks": 9,
            "block_specs": [[32, 64, 0, 3, True, 1, 1],
                            [64, 64, 0, 3, True, 1, 1],
                            [64, 64, 0, 3, True, 1, 1],
                            [64, 64, 0, 3, True, 1, 1],
                            [64, 64, 0, 3, True, 2, 1],
                            [64, 64, 0, 3, True, 1, 1],
                            [64, 64, 0, 3, True, 1, 1],
                            [64, 64, 0, 3, True, 2, 1],
                            [64, 64, 0, 3, True, 1, 1]]
        }
    ],
    "classifier": [
        {
            "block_name": "SubCenterArcFace",
            # embedding_size, num_classes, k, margin, scale, easy_margin=
            "block_specs": [64, 18, 1, 0.1, 16, False]
        }
    ],
}

MNV4_FONT_DEPTH_FC = {
    "config_name": "mnv4_font_depth_fc",
    "stem": [
        {
            "block_name": "convbn",
            "num_blocks": 1,
            "block_specs": [[1, 32, 3, 1]]
        }
    ],
    "features": [
        {
            "block_name": "uib",
            "num_blocks": 9,
            "block_specs": [[32, 64, 0, 3, True, 1, 1],
                            [64, 64, 0, 3, True, 1, 1],
                            [64, 64, 0, 3, True, 1, 1],
                            [64, 64, 0, 3, True, 1, 1],
                            [64, 64, 0, 3, True, 2, 1],
                            [64, 64, 0, 3, True, 1, 1],
                            [64, 64, 0, 3, True, 1, 1],
                            [64, 64, 0, 3, True, 2, 1],
                            [64, 64, 0, 3, True, 1, 1]]
        }
    ],
    "classifier": [
        {
            "block_name": "FC_classifier",
            # in_features, out_features, bias=False
            "block_specs": [64, 64, False]
        }
    ]
}

MNV4_FONT_DEPTH_FC_DOWNSAMPLE2 = {
    "config_name": "mnv4_font_depth_fc_downsample2",
    "stem": [
        {
            "block_name": "convbn",
            "num_blocks": 1,
            "block_specs": [[1, 32, 3, 2]]
        }
    ],
    "features": [
        {
            "block_name": "uib",
            "num_blocks": 9,
            "block_specs": [[32, 64, 0, 3, True, 1, 1],
                            [64, 64, 0, 3, True, 1, 1],
                            [64, 64, 0, 3, True, 1, 1],
                            [64, 64, 0, 3, True, 1, 1],
                            [64, 64, 0, 3, True, 2, 1],
                            [64, 64, 0, 3, True, 1, 1],
                            [64, 64, 0, 3, True, 1, 1],
                            [64, 64, 0, 3, True, 2, 1],
                            [64, 64, 0, 3, True, 1, 1]]
        }
    ],
    "classifier": [
        {
            "block_name": "FC_classifier",
            # in_features, out_features, bias=False
            "block_specs": [64, 64, False]
        }
    ]
}
MNV4ConvSmall = {
    "config_name": "MNV4ConvSmall",
    "stem": [
        {
            "block_name": "convbn",
            "num_blocks": 1,
            "block_specs": [[1, 32, 3, 1]]
        }
    ],
    "features": [
        {
            "block_name": "convbn",
            "num_blocks": 2,
            "block_specs": [
                [32, 32, 3, 2],
                [32, 32, 1, 1]
            ]
        },
        {
            "block_name": "convbn",
            "num_blocks": 2,
            "block_specs": [
                [32, 96, 3, 2],
                [96, 64, 1, 1]
            ]
        },
        {
            "block_name": "uib",
            "num_blocks": 6,
            "block_specs": [
                [64, 96, 5, 5, True, 2, 3],
                [96, 96, 0, 3, True, 1, 2],
                [96, 96, 0, 3, True, 1, 2],
                [96, 96, 0, 3, True, 1, 2],
                [96, 96, 0, 3, True, 1, 2],
                [96, 96, 3, 0, True, 1, 4],
            ]
        },
        {
            "block_name": "uib",
            "num_blocks": 6,
            "block_specs": [
                [96,  128, 3, 3, True, 2, 6],
                [128, 128, 5, 5, True, 1, 4],
                [128, 128, 0, 5, True, 1, 4],
                [128, 128, 0, 5, True, 1, 3],
                [128, 128, 0, 3, True, 1, 4],
                [128, 128, 0, 3, True, 1, 4],
            ]
        },
        {
            "block_name": "convbn",
            "num_blocks": 2,
            "block_specs": [
                [128, 960, 1, 1],
                [960, 1280, 1, 1]
            ]
        }
    ],
    "classifier": [
        {
            "block_name": "FC_classifier",
            # in_features, out_features, bias=False
            "block_specs": [64, 64, False]
        }
    ]
}

MDW_CONFIGS = {
    "BASELINE": BASELINE,
    "BASELINE_D": BASELINE_D,
    "BASELINE_D_RES": BASELINE_D_RES,
    "BASELINE_XIKE": BASELINE_XIKE,
    "BASE_EBN": BASE_EBN,
    "FOURBLOCK": FOURBLOCK,
    "LASTPROJ_SOFTMAX": LASTPROJ_SOFTMAX,
    "FC_ARCFACE": FC_ARCFACE,
    "FC_SOFTMAX": FC_SOFTMAX,
    "NOTRANS_ARCFACE": NOTRANS_ARCFACE,
    "NOTRANS_SOFTMAX": NOTRANS_SOFTMAX,
    "ALL_PROJECTION": ALL_PROJECTION,
    "ALL_PROJECTION_NOBN": ALL_PROJECTION_NOBN,
    "WITH_RES": WITH_RES,
    "SUBCENTER_2": SUBCENTER_2,
    "SUBCENTER_4": SUBCENTER_4,
    "DW_ACT_RELU": DW_ACT_RELU,
    "DW_ACT_RELU6": DW_ACT_RELU6,
    "DW_ACT_LEAKYRELU": DW_ACT_LEAKYRELU,
    "DW_ACT_ELU": DW_ACT_ELU,
    "DW_ACT_MISH": DW_ACT_MISH,
    "DW_ACT_SWISH": DW_ACT_SWISH,
    "DW_ACT_HSWISH": DW_ACT_HSWISH,
    "WITH_E_ACT_GELU": WITH_E_ACT_GELU,
    "WITH_E_ACT_RELU": WITH_E_ACT_RELU,
    "WITH_E_ACT_RELU6": WITH_E_ACT_RELU6,
    "WITH_E_ACT_ELU": WITH_E_ACT_ELU,
    "WITH_E_ACT_MISH": WITH_E_ACT_MISH,
    "WITH_E_ACT_SWISH": WITH_E_ACT_SWISH,
    "WITH_E_ACT_LEAKYRELU": WITH_E_ACT_LEAKYRELU,
    "WITH_E_ACT_HSWISH": WITH_E_ACT_HSWISH,
    "MDW_DOWNSAMPLE2": MDW_DOWNSAMPLE2,
    "MNV4_FONT_WIDTH": MNV4_FONT_WIDTH,
    "MNV4_FONT_WIDTH_FC": MNV4_FONT_WIDTH_FC,
    "MNV4_FONT_WIDTH_FC_DOWNSAMPLE2": MNV4_FONT_WIDTH_FC_DOWNSAMPLE2,
    "MNV4_FONT_DEPTH": MNV4_FONT_DEPTH,
    "MNV4_FONT_DEPTH_FC": MNV4_FONT_DEPTH_FC,
    "MNV4_FONT_DEPTH_FC_DOWNSAMPLE2": MNV4_FONT_DEPTH_FC_DOWNSAMPLE2,
    "MNV4ConvSmall": MNV4ConvSmall
}
